package LeetCode刷题;

/**
 * @program: Java_Study
 * @author: Xiaofan
 * @createTime: 2021-09-15 21:13
 * @description: Functions of this class is
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 *
 * 官方做法：
 * class Solution {
 *     public int reverse(int x) {
 *         int rev = 0;
 *         while (x != 0) {
 *             if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
 *             //这里不能是等于，因为万一x当前该位为0的话，加到末尾是可以的
 *                 return 0;
 *             }
 *             int digit = x % 10;
 *             x /= 10;
 *             rev = rev * 10 + digit;
 *         }
 *         return rev;
 *     }
 * }
 **/
public class No整数反转 {
    public static void main(String args[]) {
//        2,147,483,648-1
//        System.out.println(Integer.MAX_VALUE);
//        System.out.println(Integer.MIN_VALUE);
        System.out.println(reverse(-2147483641));
        /**
         * -7463847412
         * -2147483648
         *
         * -1463847412
         *
         *
         *
         */
    }

    public static int reverse(int x) {
        int length=String.valueOf(x).length();
        if(x<0){
            length--;
        }
        long ans=0;
        long k= (int) Math.pow(10,length-1);
        while (length-->0){
            if(ans>Integer.MAX_VALUE||ans<Integer.MIN_VALUE||k>Integer.MAX_VALUE){
                return 0;
            }
            ans+=(x%10)*k;
            x/=10;
            k/=10;
        }
        return (int) ans;
    }
}